#pragma once

#include "topcvt_unpack.hpp"
#include "topcvt_pack.hpp"
#include "topcvt_policyhelper.hpp"

namespace topcvt
{
    class  NonePack : public  PackImp
    {
    public:
        void packField(pugi::xml_node& node, FieldCfg& f,PolicyContext& ctx)
        {
            string variant = f.getName();
            map<string, string> atx;
            
            string out = PolicyHelper::getPackFieldValue(ctx, f, ctx.getFldVal(ctx, variant), atx);
            TLOG_DEBUG("field: %s -->[ %s ]",variant.c_str(),out.c_str());
            m_message.put(out);
        }
    };

    class NoneUnpack : public  UnpackImp
    {
    public:
        NoneUnpack(ByteBuffer& message)
            : UnpackImp(message)
        {
        }

        string unpackField(pugi::xml_node& node, FieldCfg& f,PolicyContext& ctx) override
        {
            string message = m_message.getRemainBytes();
            if (message.length() == 0) 
            {
                return string();
            }
            string value = PolicyHelper::getUnpackFieldValue(ctx, f, message);
            if (!f.getName().empty())
            {
                TLOG_DEBUG("field:%s --> [%s]", f.getName().c_str(), value.c_str());
                ctx.getObj().set(f.getName(), value);
            }
            return value;
        }
    };  
};